package org.jeecg.modules.zhoupackage.service;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.jeecg.modules.zhoupackage.pojo.*;
import org.jeecg.modules.zhoupackage.pojo.myexcel.PengProductEntity;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 团订Service
 *
 * @author zxl
 * @since 20201008
 */
public interface ITeamOrderService {

    /**
     * 团订里面定制款查看详细
     *
     * @param productId 产品ID
     */
    MlccProductInfo getDetail(String productId);

    /**
     * 团订的产品列表
     *
     * @param token    令牌
     * @param pageNo   分页当前页
     * @param pageSize 页面大小
     */
    IPage<MlccProductInfo> getProList(String token, Integer pageNo, Integer pageSize);

    /**
     * 团订的模板删除
     *
     * @param moudleSn 模板编号
     */
    int moduleDel(String moudleSn);

    /**
     * 团订的订单删除
     *
     * @param orderSn 订单编号
     */
    int OrderDel(String orderSn);

    /**
     * 编辑团订模板
     *
     * @param moduleSn 模板编号
     */
    MlccTeamModuleInfo updateModule(String moduleSn);

    /**
     * 根据部门ID和订单编号查询产品列表
     *
     * @param departid 部门id
     * @param orderSn  订单编号
     */
    List<MlccProductInfo> getProduct(String departid, String orderSn);

    /**
     * 团订界面尺码选择（查询标准尺码父级）
     *
     * @param categoryIds 选中产品的类别ID，多个用逗号隔开
     */
    Set<MlccStandardInfo> sizeChose(String categoryIds);

    /**
     * 根据选中的标准尺码查询
     *
     * @param topid 标准尺码id
     */
    Map<String, List<MlccStandardInfo>> getSizeButtons(String topid);

    /**
     * 获取自定义尺寸
     *
     * @param categoryids 类别id
     */
    Set<MlccBodySizeInfo> getCustomSize(String categoryids);

    /**
     * 团订订单预览
     *
     * @param orderSn 订单编号
     */
    MlccTeamOrderInfo previewOrder(String orderSn);

    /**
     * 团订订单预览界面立即下单
     *
     * @param orderSn 订单编号
     */
    int orderNow(String orderSn);

    /**
     * 前端——我的订单——团订返修，获取订单基本信息
     *
     * @param token   令牌
     * @param orderSn 订单编号
     */
    MlccTeamOrderInfo getBaseTeamOrderDetail(String token, String orderSn);

    /**
     * 团订返修根据小产品编号获取员工列表（实际获取单个员工）
     *
     * @param token        令牌
     * @param orderSn      订单编号
     * @param smallProCode 小产品编码
     * @return 人员数据
     */
    List<MlccCustomerInfo> getempList(String token, String orderSn, String smallProCode);

    /**
     * 团订获取产品返修尺寸列表
     *
     * @param token 令牌
     * @param code  小产品编码
     * @return 返修尺寸列表
     */
    Set<MlccCategoryFanxiuInfo> listAftersize(String token, String code);

    /**
     * 团订小产品选择重做，查询真正的尺寸表
     *
     * @param token 令牌
     * @param code  小产品编码
     * @return 真正的客户量体尺寸列表
     */
    List<MlccXiaoProductBodysize> listBodySize(String token, String code);

    /**
     * 团订新增返修数据（小产品尺寸表添加返修尺寸数据）
     *
     * @param token      令牌
     * @param code       小产品编码
     * @param afterCode  售后订单编码
     * @param img        售后图片
     * @param list       返修参数
     * @param fabricList 面料参数
     * @param reason     售后原因
     */
    int saveAfter(String token, String code, String afterCode, String img,
                  List<MlccCategoryFanxiuInfo> list, List<MlccFabricInfo> fabricList, String reason);

    /**
     * 团订前端选择重做
     *
     * @param token      令牌
     * @param code       小产品编号
     * @param afterCode  售后订单编号
     * @param img        售后图片
     * @param list       返修参数集合
     * @param fabricList 面料集合
     * @param reason     售后原因
     */
    int saveRedo(String token, String code, String afterCode, String img,
                 List<MlccCategoryFanxiuInfo> list, List<MlccFabricInfo> fabricList, String reason);

    /**
     * 团订获取本次售后的人员列表
     *
     * @param token     令牌
     * @param afterCode 售后订单编号
     * @return 人员列表
     */
    List<MlccCustomerInfo> listAfterEmp(String token, String afterCode);

    /**
     * 根据小产品编码获取小产品ID
     *
     * @param token 令牌
     * @param code  小产品代码
     * @return 小产品数据
     */
    MlccCustomerProductInfo getSmallPro(String token, String code);

    /**
     * 获取小产品面料
     *
     * @param token 令牌
     * @param code  小产品编号
     */
    List<MlccFabricInfo> getFabricList(String token, String code, String orderSn, Double mishu);

    /**
     * 团订售后，计算本次售后的价格
     *
     * @param token     令牌
     * @param afterCode 售后订单编号
     */
    double checkAfterPrice(String token, String afterCode);

    /**
     * 新建售后订单
     *
     * @param orderSn 订单号
     * @param token   令牌
     * @return 返回售后订单编号
     */
    String createAfterOrder(String orderSn, String token);

    /**
     * 团订我的订单——统计本次售后的金额
     *
     * @param token      令牌
     * @param afterOrder 售后订单编号
     * @param orderSn    订单编号
     */
    double getAfterPrice(String token, String afterOrder, String orderSn);

    /**
     * 更新团订订单   团订售后支付
     *
     * @param token     令牌
     * @param orderSn   订单编号
     * @param afterCode 售后订单编号
     * @param money     本次售后价格
     */
    int updateTeamOrder(String token, String orderSn, String afterCode, String money, String reason);

    /**
     * 团订获取人员尺寸
     *
     * @param proID 小产品id
     */
    List<MlccXiaoProductBodysize> listSmallSize(String proID, String orderSn);

    /**
     * 团订个人尺寸详情，获取类别
     *
     * @param proID 小产品ID
     */
    MlccProductInfo getProName(String proID);

    /**
     * 查询团订订单批次
     *
     * @param token   令牌
     * @param orderSn 团订订单编号
     * @return 批次列表
     */
    List<MlccTrackingTeamDepart> listTrackingteam(String token, String orderSn);

    /**
     * 团订未发货人员名单
     *
     * @param token   令牌
     * @param orderSn 订单编号
     * @return 小产品列表
     */
    List<MyNotshipmentsEmp> listNotshipments(String token, String orderSn);

    /**
     * 团订查看已发货人员列表
     *
     * @param token 令牌
     * @param boxID 装箱单ID
     */
    List<MyNotshipmentsEmp> getoutPerson(String token, String boxID);

    /**
     * 获取10个面料数据
     *
     * @param token 令牌
     * @return 面料列表
     */
    List<MlccFabricInfo> listTenFabric(String token, String code);

    /**
     * 团订产品添加到部门
     *
     * @param entity 前端提交的产品数据
     */
    int addProductDepart(PengProductEntity entity);

    /**
     * 获取产品基本信息
     *
     * @param proID 产品id
     */
    MlccProductInfo getBaseProductDetail(String proID);

    /**
     * 根据团订订单中的客户ID获取部门信息
     *
     * @param token 令牌
     * @param cuID  团订订单中的客户ID
     */
    MlccCustomerInfo getDepartByCuID(String token, String cuID);

    /**
     * 团订模板详情
     *
     * @param moduleSn 模板编号
     * @param token    令牌
     */
    MlccTeamModuleInfo getTeamModuleDetail(String moduleSn, String token);

    /**
     * 产品基本信息（为了获取类别ID）
     *
     * @param id 产品ID
     */
    MlccProductInfo proDetail(String id);

    /**
     * 计算团订价格
     *
     * @param orderSn 订单编号
     */
    JSONObject teamOrderPrice(String orderSn);

    /**
     * 团订查询成本价(加价服务)
     *
     * @param orderSn 团订订单编号
     */
    JSONObject teamOrderChengben(String orderSn);

    /**
     * 团订更新订单金额
     *
     * @param token        令牌
     * @param orderSn      订单编号
     * @param remark       备注
     * @param shiyang      式样
     * @param modifiedYang 该款打样
     * @param emergency    紧急指数
     * @param orderMoney   订单金额
     * @param brandLabel   品牌标
     */
    int updateTeamOrder(String token, String orderSn, String remark, String shiyang, String modifiedYang, String emergency, String orderMoney, String brandLabel);

    /**
     * 给产品添加附加条件（个订、团订都可以使用）
     *
     * @param productID 产品ID
     * @param type      附加条件的类型：1式样，2改款打样，3紧急指数
     * @param fujiaName 附加条件的名称
     * @param price     附加条件的价格
     */
    int changeProFujia(String productID, Integer type, String fujiaName, Double price);

    /**
     * 修改团订的面料购买米数
     *
     * @param orderSn   订单编号
     * @param orderType 订单类型
     * @param fabricid  面料id
     * @param mishu     购买米数
     */
    int changgefabricMishu(String orderSn, Integer orderType, String fabricid, String mishu);


    /**
     * 修改团订的面料购买米数 （客供面料专用）
     *
     * @param orderSn   订单编号
     * @param orderType 订单类型
     * @param fabricid  面料id
     * @param mishu     购买米数
     * @param proid     产品id
     * @param remark    备注
     */
    int changgefabricMishuke(String orderSn, Integer orderType, String fabricid, String mishu, String proid, String remark);

    /**
     * 获取个团定单的收费服务项（里布、低领尼、纽扣）
     *
     * @param orderSn 团订订单编号
     */
    JSONObject shouFeifuwuXiang(String orderSn);

    /**
     * 员工详情
     *
     * @param smallProid 小产品id
     */
    MlccCustomerInfo deppDetail(String smallProid);

    /**
     * 根据部门id（采购项）导出人员列表excel
     *
     * @param departId 部门id
     */
    List<MlccCustomerInfo> departProExcel(String departId);

    /**
     * 根据部门id（采购项）导出人员列表excel
     *
     * @param departId 部门id
     */
    void departProExcel2(String departId, HttpServletResponse response) throws Exception;

    /**
     * 团订申请售后，根据员工工号获取名下小产品列表
     *
     * @param code 员工工号
     */
    List<MlccProductInfo> getSmallProductListByEmpCode(String code, String orderSn);
}
